

// 1.ES6 Symbol的使用
const s1 = Symbol()
const s2 = Symbol()

console.log(s1 === s2);

// 2.ES2019(ES10)中，Symbol有描述符
const s3 = Symbol("aaa")
console.log(s3.description);


// 3.Symbol值作为key
// 3.1定义对象时使用
const obj = {
  [s1]: "abc",
  [s2]: "cba"
}
// 3.2 新增属性
obj[s3] = "nba"

// 3.3Object方式
const s4 = Symbol()
Object.defineProperty(obj, s4, {
  enumerable: true
})
console.log(obj[s1])
// 下面这种方式不行
console.log(obj.s1);

// 4.Symbol作为key属性名，在遍历Object.keys获取不到Symbol值
console.log(Object.keys(obj));
console.log(Object.getOwnPropertyNames(obj));
// 正确用法
const keys = Object.getOwnPropertySymbols(obj)
for (const key of keys) {
  console.log(obj[key]);
}

// 5.Symbol.for(描述)
const sa = Symbol.for("aa")
const sb = Symbol.for("aa")
console.log(sa === sb);
const key = Symbol.keyFor(sa)
console.log(key);
